import apriori

# 创建一个用于测试的简单数据集dataSet
dataSet = apriori.loadDataSet()
print ("step-0：创建一个用于测试的简单数据集dataSet")
print ("dataSet：", dataSet)
print ("")

# 构建第一个候选集的列表C1
# 将数据集中全部记录所包含的不同项作为单元素集合添加至列表C1
print ("step-1：将数据集中全部记录所包含的不同项作为单元素集合添加至列表C1")
C1 = list(apriori.createC1(dataSet))
print ("C1：", list(C1))
print ("")

# 构建集合表示的数据集D
# 将数据集dataSet列表中的元素转化为集合，存入数据集D
print ("step-2：将数据集dataSet列表中的元素转化为集合")
D = list(map(set,dataSet))
print ("D：", list(D))
print ("")

# 构建频繁项集的列表L1
# 对数据集D中的集合进行扫描，计算列表C1集合中的支持度，并将支持度大于最小支持度的集合存入频繁项集列表L1
print ("step-3：对数据集D中的集合进行扫描，计算列表C1集合中的支持度，并将支持度大于最小支持度的集合存入频繁项集列表L1")
L1,suppData0 = apriori.scanD(D,C1,0.5)
print ("L1：", list(L1))
print ("suppData0：", suppData0)
print ("")

# 完整的apriori算法，发现频繁项集
print ("step-4：利用apriori算法发现频繁项集")
L,suppData = apriori.apriori(dataSet)
print ("L：", list(L))
print ("suppData：", suppData)
print ("")

# 从频繁项集中挖掘关联规则
print ("step-5：从频繁项集中挖掘关联规则")
rules = apriori.generateRules(L,suppData,minConf=0.5)
print ("rules：", rules)
print ("")

# 示例：发现毒蘑菇的相似毒蘑菇的相似特征
print ("示例：发现毒蘑菇的相似毒蘑菇的相似特征")
mushDatSet = [line.split() for line in open('mushroom.dat').readlines()]    # 载入蘑菇数据
L,suppData = apriori.apriori(mushDatSet,minSupport = 0.3)           # 在蘑菇数据集上运行apriori算法
print ("在结果中搜索包含有毒特征值2的频繁项集：")
for item in L[1]:
    if item.intersection('2'): print (item)
